#!/bin/sh /etc/rc.common
# Copyright (C) 2009-2017 OpenWrt.org

START=95

# XXX: pid-files are useless because sslh forks after creating them
SERVICE_USE_PID=

start_instance() {
	local section="$1"

	# check if section is enabled (default)
	local enable
	config_get_bool enable "${section}" 'enable' '0'
	[ ${enable} -gt 0 ] || return 1

	local args=""
	local val
	# A) listen parameter
	config_get vals "${section}" listen
	[ -n "${vals}" ] && for val in $vals; do append args "-p${val}"; done
	# B) ssh parameter
	config_get val "${section}" ssh
	[ -n "${val}" ] && append args "--ssh ${val}"
	# C) tls parameter
	config_get val "${section}" tls
	[ -n "${val}" ] && append args "--tls ${val}"
	# D) openvpn parameter
	config_get val "${section}" openvpn
	 [ -n "${val}" ] && append args "--openvpn ${val}"
	# E) tinc parameter
	config_get val "${section}" tinc
	 [ -n "${val}" ] && append args "--tinc ${val}"
	 # F) xmpp parameter
	config_get val "${section}" xmpp
	[ -n "${val}" ] && append args "--xmpp ${val}"
	# G) timeout (before a connection is considered to be SSH)
	config_get val "${section}" timeout
	[ -n "${val}" ] && append args "-t ${val}"
	# H) verbose parameter
	local verbosed
	config_get_bool verbosed "${section}" verbose 0
	[ "${verbosed}" -ne 0 ] && append args "-v"
	 # I) sslh config file (cmd line args override file settings)
	config_get val "${section}" configfile
	[ -n "${val}" ] && append args "-F${val}"
	# J) http parameter
    config_get val "${section}" http
    [ -n "${val}" ] && append args "--http ${val}"
	# K) transparent parameter
	config_get_bool val "${section}" transparent 0
	[ "${val}" -ne 0 ] && append args "--transparent"

	# Defaults were removed for --user and --pidfile options
	# in sslh 1.11; Define them here instead.
	append args "--user nobody"
	append args "--pidfile /var/run/sslh.pid"

	# XXX: allow more that one instance to run simultaneously
	SERVICE_MATCH_NAME=1 SERVICE_NAME="sslh-dummy-$$" \
	service_start /usr/sbin/sslh ${args}
}

start() {
	config_load 'sslh'
	config_foreach start_instance 'sslh'
}

stop() {
	service_stop /usr/sbin/sslh
}
